GAME−MZインタプリタ ――――――――――――――――――――――――――――――――――――――― アスキー 1979年10月号掲載 MZ−80K/C マシン語 05800H−05EFFH S:5800 起動方法 モニタから起動  コールドスタート 05800H  ホット スタート 05802H ――――――――――――――――――――――――――――――――――――――― 1月号でGAME80が発表され、 80系のユーザーも簡単にGAMEを使用出来る様になった事は 大変喜ばしい限りです。 今回はこのGAMEをMZ−80Kに移植したものを発表します。 GAME−MZは、 MZが持っている機能を生かすことも含めて 単にリロケートすることにどまらずサブルーチンの改良、 ブロックの入れ替え等の大幅な変更をしていますので、 これを他機種に移植する場合にはかなり骨の折れる作業となります。 またGAMEの性格そのものが機械語に非常に近い為、 機械語を勉強していく上で必要な機能を追加し、 初心者がコンピュータを始める場合の 手引的存在になり得るようなものにもしてゆきたいとの希望もあり、 それを考慮に入れた改造を心がけています。 ・―――――――――――――――――・ |   GAME−MZの特徴    | ・―――――――――――――――――・ MZ80Kの特徴は 何と言ってもあのスクリーンエディット機能にあり、 これを生かすと共に PRINT文中での カーソル処理機能も持たせています。 またBSのように強力なモニタをそなえていませんので 特にテープとの入出力機能が必要となり サブルーチン形式で追加しています。 その他弱干の変更、追加機能もありますので 詳しいことは表1を参考にして下さい。 CRTについては走査チェック用の CALL 0DA6HHを除いてあり、 この為多少画面がちらつきますが 気にならない程度です。 理由はGAMEの高速性に比べて 表示速度が遅すぎる為です。 ・―――――――――――――――――・ |      移植手順       | ・―――――――――――――――――・ リスト2を入力しますが、 方法としてMACHINE LANGUAGEを使用する場合と BASIC(リストは、今月号P.32)を使用する場合と 2通り考えられますが、 いずれの方法でも構いませんので打ち込みをし、 間違いがないことを確認してテープにSAVEして置きます。 BASICを用いている方はVERIFYが出来ませんので 2度SAVEして置くとよいと思います。 このテープはこのままでも使用出来ますが、 オートスタートになっていませんので もう一本テープを用意して下さい。 テープをロードした後 $5800からRUNさせて(GOTO$5800) 正常に作動することを確認したら、 今度はオートスタート用のテープを作成します。 GAMEのダイレクトモードで、  =$5800 ニ=$5EFF  A=$1160 A(0)=$5800  >=$5DD0 "GAME-MZ" を実行します。 一行目の2番目の左辺はカタカナの“ニ”ですので くれぐれも間違いのないようにして下さい。 これでオートスター用のテープが作成されましたので いつでも使用可能です。 ・―――――――――――――――――・ |     今後の拡張       | ・―――――――――――――――――・ アセンブラを入手したら全面的にコーディングし直し、 現在サブルーチンとなっているオプションも 例えば頭に“/”などをつけ、 これを判別したらオプショナルルーチンへ 飛んでゆくような形にすれば GAMEインタプリタ自体は改造しなくても どんどん機能を広げられる為、 拡張コマンドとして加えようと思っています。 またTIMER やSET、RESET命令等についても 追加予定をしていますので御期待下さい。 ・―――――――――――――――――――――――――――・ | | | ―――――――――――――――・ | |$0000 |            | | |   | ROM モニタ | | |   |            | | | ―――――――――――――――| | |$1000 | モニタワークエリア・入力バッファ | | |   |            |BUFF $11A3 | | ―――――――――――――――| | |$1200 |            |PRG BEG $1200 | |   | プログラムエリア | | |   |            | | |   |            | | | ―――――――――――――――| | |   |            |COLD START $5800 | |   | GAME MZインタプリタ |HOT START $5802 | |   | I/Oルーチンその他 |TST BRK $58F2 | |   |            |IN CHR $5D83 | | ―――――――――――――――| | |$5DD0 | オプションルーチン |OUT CHR $5D83 | |   |            |OUT CHR $5D97 | | ―――――――――――――――| | |$5EA0 |    未使用     | | |   |            | | | ―――――――――――――――| | |$5F00 | 変数、その他    |PG E $5F4C | |   |            |PG L $5F54 | |   |            |PG B $5FAA | |$5F84 | 第2スタックポインタ | | |   |            |SP 2 $5F84 | |   |            | | |$5F86 | 第2スタック     |STACK2 $5FD4 | |   |            | | |$5FD4 | 第1スタック     |STACK1 $6000 | |$5FFF | (基本システムRAMエンド) | | |   |            | | | ―――――――――――――――| | |$6000 |拡張RAMエリア | | |   |(ユーザープログラム用として使| | |   |用する場合は*=[RAMEND AD| | |$9FFF |RS.]の形でRAMエンドポインタを| | |$CFFF |上げておく必要がある) | | | ―――――――――――――――| | |$D000 |            | | |   |   VRAM     | | |   |――――――――――――| | | | ・―――――――――――――――――――――――――――・ GAME−MZ メモリマップ 標準RAM構成(20K)でも動かすことができ、 BASICやマシンラングージモニタとも共存することが可能となっている。 ・―――――――――――――――――――――――――――――――――――――・ |《命  令》 |《一般形》 |     《意      味》       | |―――――――+――――――+――――――――――――――――――――――| | <システム関係> | | | |LIST(All) |0 |すべてのプログラムをリストをする         | | (From) |行番号/ |行番号の行から最後までリストする | |RUN |#=1 |プログラムの初めから実行 | | (From) |#=行番号 |行番号から実行 | | | | (なければそれより大きい最初の行) | |NEW |&=0 |PG先頭アドレス(=)をPG末ポインターに代入し、 | | | |その位置にEOFマーク($FF)を書き込む | |OPEN FILE |&:0)=$FF |EOFマークをOPEN状態($FF)にする | |LOCK FILE |&:0)=$F0 |EOFマークをLOCK状態($F0)(修正禁止)にする。 | |SERACH END |= = |PG末ポインター(&)をEOFマークのアドレスにセットする。 | |CHANGE PROGRAM|=n |PG先頭ポインター(=)をnのアドレスにし、 | |BIGIN POINTER | |PG末ポインター(&)を | | | |そこから最初にあるEOFマークにセットする | |CHANGE RAM END|*=n |RAM末ポインター(*)をnのアドレスにセットする。 | |―――――――+――――――+――――――――――――――――――――――| | <出力関係> | | | |PR LEFT |?=n |nの値を10進左づめ出力 | |PR RIGHT |?(m)=n |nの値をmケタで10進右づめ出力(1=- | | | | (入力変数)| | | |INPUT |? |変数として使用「算術式」を | | | | 一行入力してその値をとる。 | |INPUT CHR |$ |変数として使用「一文字」入力してのASCIIコートを | | | |下位1バイトとする(上位1バイトは0) | |―――――――+――――――+――――――――――――――――――――――| |<制御関係> | | | |LET |変数=n |A=B+C :nの値を左辺の変数に代入する。 | |IF |;=n |nの値が真(≠0)なら次の「文」に行く | | | |nの値が偽(=0)なら次の「行」に行く | |<制御関係> | | | |GOTO |#=n |nの値の行へ行く。(n=0なら何もしない) | |END(STOP) |#=-1 |実行を終る。 | |GOSUB |!=n |文末位置を第2スタックに納めて、 | | | | nの値の行番号へ行く(n=0なら何もしない) | |RETURN |] |文末位置を第2スタックから取り出し、そこに戻る | |FOR - TO |代入文,n |代入文を実行し、nの値を終値パラメーターとして、 | | | |文末位置と共にを第2スタックに納める | |NEXT(STEP) |@=n |nの値を=の次の文字(制御変数)に代入し、 | | | |その値が第2スタック中の終値パラメーターを | | | | 超えていれば、次の文を実行する。 | | | | 超えていない場合は、 | | | | 第2スタック中の文末位置へ戻る | |DO |@ |0を終値パラメーターとし文末位置と共に | | | | 第2スタックに納める | |UNTIL |@=(n) |nの値が0(第2スタック中の終値パラメーター)より | | | | 大なら(真)次の行へ行く、| | | | 0か負なら(偽)第2スタック中の文末位置へ戻る| |―――――――+――――――+――――――――――――――――――――――| | <その他> | | | |SET RND |'=n |乱数レジスターにnの値を設定する | |RND(n) |変数='n |1〜nまでの乱数を発生、変数に代入する | |REM |行番号S |行番号のあと空白を置かなければ注釈文となる | |MOD |n=%m または |除算のあまりをとる。 | | | | バージョンにより使用方法が異なる | | |n=% | | |マルチステートメント |行番号 S S…|空白で区切ればマルチステートメントになる | ・―――――――――――――――――――――――――――――――――――――・ GAME−MZインタプリタ ・―――――――――――――――――――――――――――――――――――――・ |GAME IIIに関する |MOD(%) |%A,%B等の使用が出来ないが、 | |変更点 | |%(A),%(B)の形の単独変数として | | | |使うこともできる | | |特殊変数|GAME IIIの演算のバグは取り除かれており、| | | |??=&-=等の使用もさしつかえない | | |エディット |SHARP BASICと同等なスクリーンエディタを使える | | |JOB打切 |BREAKキーを用いる、JOB一時中止はSPACE | |―――――――――――+―――――――――――――――――――――――――| |インタプリタ内部の追加機能 | | | |CHANGE PAGE |=$2000 #=1|$2000からプログラムを実行する | | | |ページチェンジの後のサーチエンドは | | | |自動的にかかり、 | | | |そのまま実行を継続できる | |TAB |,=n |GAME IIIのTABはスペースをプリントするが、 | | | | これはカーソルのみ移動する| |AND |n.m |nとmのANDをとる | |OR |n;m |nとmのORをとる | |XOR |n!m |nとmのXORをとる | |GET |;=[=n |変数[の下位には常に押された | | | | キーのアスキーコードが入る。 | | | |プログラムの最初で[=0として上位をクリアする | |―――――――――――+―――――――――――――――――――――――――| |オプションルーチン | |                 | |SAVE |>=$5DD0 "NAME"|Filename(16文字まで)を付けて | | | |カセットにセーブする | | | |先頭ポインタ=からエンドポインタ&までが | | | | セーブされる| | | |任意のエリアをセーブしたい時は | | | |「=先頭アドレス」「ニ(カタカナのニ)=エンドアドレス」| | | | の形でポインタを操作おく必要がある| |LOAD |>=$5E00 |テープの内容をそのままロードする。 | | | |先頭ポインタは自動的に更新され | | | |サーチエンドも実行される | |VERIFY |>=$5E20 |テープの内容をベリファイする | | | |内容が異なる場合 | | | |エラーが表示されるが、 | | | |OKの場合なにも出ない | |DOWN |>=$5E40 |ダウンスクロール(カーソルは移動しない) | |LEFT |>=$5E60 |レフトスクロール(カーソルは移動しない) | |RIGHT |>=$5E70 |ライトスクロール(カーソルは移動しない) | |MUSIC |>=$5E90 data |ひとつスペースをあけた後の | | | |音階データ(SHARPBASIC)と同じ) | | | |を演奏する。 | | | |データはクオーテションでくくらず末尾に | | | |必ず■($C8,グラフィック文字)を置く | | | |TEMPOは$119Eの内容を変えればよい | | | |   (1が最高速)| ・―――――――――――――――――――――――――――――――――――――・